由於我們的Linebot是跑在AWS Lambda上的,而Lambda是無狀態的serverless服務,當Lambda被觸發後,只要經過一段時間的閒置,虛擬機就會被關閉,也就是說沒有辦法在Lambda上面長期存儲資料,所以我們將可能需要儲存的放到DynamoDB裡面。
首先還是要讓Lambda有權限去調用DynamoDB,我們一樣點進我們創好的Lambda,從組態的許可下,能看見執行角色,按進去新增權限

輸入DynamoDB搜尋,找到AmazonDynamoDBFullAccess打勾後新增權限,這樣就可以了

但我們不可能每次本機端測試的時候,都連線到AWS去操作DynamoDB,因此需要一個離線版本的架在自己的電腦上,AWS提供了一些方法,這邊我們選擇使用比較平易近人的docker-compose的方式直接拉起來。
以下就可以建立一個簡單跑在8000port的Local Dynamodb了
version: "3.8"
services:
  dynamodb-local:
    command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
    image: "amazon/dynamodb-local:latest"
    container_name: dynamodb-local
    ports:
      - "8000:8000"
    volumes:
      - "./docker/dynamodb:/home/dynamodblocal/data"
    working_dir: /home/dynamodblocal
但是由於這是純的dynamodb,所以並不像在AWS上那樣有GUI可以操作,為了方便開發的時候能看一下資料,我們使用這個開源專案所提供的GUI,接著讓我們更新一下docker-compose.yaml
version: "3.8"
services:
  dynamodb-local:
    command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
    image: "amazon/dynamodb-local:latest"
    container_name: dynamodb-local
    ports:
      - "8000:8000"
    volumes:
      - "./docker/dynamodb:/home/dynamodblocal/data"
    working_dir: /home/dynamodblocal
  dynamodb-admin:
    image: aaronshaf/dynamodb-admin
    ports:
      - "8001:8001"
    environment:
      DYNAMO_ENDPOINT: "http://dynamodb-local:8000"
      AWS_REGION: "ap-northeast-1"
      AWS_ACCESS_KEY_ID: dummy
      AWS_SECRET_ACCESS_KEY: dummy
    depends_on:
      - dynamodb-local
補上dynamodb-admin,讓環境變數中的DYNAMO_ENDPOINT指定到dynamodb的服務,也就是dynamodb-local的8000port,這樣就沒問題了
接著docker-compose up -d後,打開http://localhost:8001/ ,就可以看到GUI了~
到此DynamoDB的設定就都好了,我們明天寫點code來測試看看,那我們明天見~